import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import dhy.com.Main;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

//MP代码生成器
@SpringBootTest(classes = Main.class,webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ExtendWith(SpringExtension.class)
public class Generator
{
    //代码生成的文件路径                  当前系统的目录
    private final String outPutDir=System.getProperty("user.dir")+"/src/main/java/dhy/com";
    //数据库驱动名
    @Value("${spring.datasource.driver-class-name}")
    private String dbDriverClassName;
    //数据库地址
    @Value("${spring.datasource.url}")
    private String dbUrl;
    //用户名
    @Value("${spring.datasource.username}")
    private String dbUsername;
    //密码
    @Value("${spring.datasource.password}")
    private String dbPassword;

    @Test
   public void CodeAutoGenerated()
   {


       //1.全局策略配置
       GlobalConfig config = new GlobalConfig();
       config.setAuthor("大忽悠")//作者
               .setOutputDir(outPutDir)//生成路径
               .setFileOverride(true)//文件覆盖
               .setIdType(IdType.AUTO)//主键策略
               .setServiceName("%sService")//设置生成service接口名字的首字母是否为I（默认会生成I开头的IStudentService）
               .setBaseResultMap(true)//自动SQL映射文件，生成基本的ResultMap
               .setBaseColumnList(true);//生成基本的SQL片段

       //2.数据源配置
       DataSourceConfig dataSourceConfig = new DataSourceConfig();
       dataSourceConfig.setDbType(DbType.MYSQL)//设置数据库类型
               .setDriverName(dbDriverClassName)
               .setUrl(dbUrl)//数据库地址
               .setUsername(dbUsername)//数据库名字
               .setPassword(dbPassword);//数据库密码


       //3.策略配置
       StrategyConfig strategy = new StrategyConfig();
       strategy.setCapitalMode(true)//全局大写命名
               .setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略
               .setColumnNaming(NamingStrategy.underline_to_camel)//列的命名也支持驼峰命名规则
               .setTablePrefix("job_")//数据库表的前缀
               .setInclude("job_info")//设置要映射的表名，这里可以写多个
               .setEntityLombokModel(true)  //使用Lombok开启注解
               .setControllerMappingHyphenStyle(true);//controller层，开启下划线url : //localhost:8080/hello_id_2

       //4.包名策略
       PackageConfig packageConfig = new PackageConfig();
       packageConfig
              // .setModuleName("generator")
               .setParent("com")//所放置的包(父包)
               .setMapper("mapper")//Mapper包
               .setService("service")//服务层包
               .setController("controller")//控制层
               .setEntity("beans")//实体类
               .setXml("mapper");//映射文件
       //5.整合配置
       AutoGenerator autoGenerator = new AutoGenerator();
       autoGenerator.setGlobalConfig(config)
               .setDataSource(dataSourceConfig)
               .setStrategy(strategy)
               .setPackageInfo(packageConfig);
       //6.执行
       autoGenerator.execute();
   }
}

